Crate syn_file_expand
source · [−]Expand description
syn-file-expand
This library allows you to load full source code of multi-file crates into a single syn::File
.
Features:
- Based on
syn
crate. - Handling
#[path]
attributes - Handling
#[cfg]
where it affects modules to filesystem mapping - There is both a lower-level IO-less function and a simpler one that just loads crate from a
std::fs::Path
.
Start exploring the library from the read_crate
function.
Bonus: CLI tool
syn-file-expand-cli
tool expands Rust sources, like cargo expand
, but without macro expansion, only for modules.
rustc
is not involved. Filtering through rustfmt
is adviced for debugging use case.
$ syn-file-expand-cli -fTp src/lib.rs
#![doc = include_str!("../README.md")]
#![forbid(unsafe_code)]
...
mod attrs {
use proc_macro2;
...
}
mod expand_impl {
use std::path::PathBuf;
...
}
$ syn-file-expand-cli --help
Usage: syn-file-expand-cli [OPTIONS]
Use `syn-file-expand-cli -fTp src/lib.rs` as a starting point.
Reads rust source file, including referred modules and expands them into a single source with all modules inline
Apart from respective dedicated command line arguments, conditional paths like
`#[cfg_attr(feature="qqq"),path=...)` are resolved using
environment variables like SYN_FILE_EXPAND_FEATURE_QQQ=1
Other influential envvars: SYN_FILE_EXPAND_DEBUGVARS=1 SYN_FILE_EXPAND_DEFAULTTRUE=1
Positional arguments:
input_file Input Rust source file to start crawling from
Optional arguments:
-h, --help
-l, --loopify Convert all blocks and expressions to `loop{}`s.
Note that inner items within blocks get lost in the process.
-D, --undoc Strip all documentation attributes. Note that inner items within blocks are not processed and may retain their attributes.
-T, --cfg-true-by-default Assume all `#[cfg]`s and `#[cfg_attr]`s are true. May lead to errors unless `-f` is also used.
-f, --full-crate-tree Allow duplicate modules, also preserve/transform some `cfg` attributes.
-c, --cfg CFG Set this cfg check result to true.
Note that `all` or `any` are not handled.
You need to set all needed expression results one by one.
Strings required for --cfg are not the same as for environment variables-
-based version of this feature.
-u, --unset-cfg UNSET-CFG In `--cfg-true-by-default` mode, explicitly unset given cfg expression outcome.
-d, --debug-cfg Print each encountered cfg check to stderr, in form suitable for `--cfg` parameter
Note that the format is different from the one used by `SYN_FILE_EXPAND_DEBUGVARS=1` environment variable.
-o, --output OUTPUT Use given file for output instead of stdout
-p, --pretty Use `prettyplease` to format the output
There is a Github release with the tool pre-built for various platforms.
You can also install the tool using cargo install syn-file-expand-cli
.
Re-exports
pub extern crate proc_macro2;
pub extern crate syn;
Structs
Main error type that is returned from functions of this crate, as well as from some user callbacks.
Helper struct to define Resolver
implementations using closures.
Enums
Error originated from parsing of #[path]
, #[cfg]
or #[cfg_attr]
attibutes
in code contained in this crate.
See Display
implementation for details about specific variants.
Specifics of error when expanding a particular module
Traits
Data and configuration source for the expand_modules_into_inline_modules
function.
You can use ResolverHelper
instead of manually implementing this.
Functions
Take a syn
representation of a Rust source file and turn into similar syn
representation,
but with mod something;
expanded into mod something { ... }
.
Load whole source code of a crate based on root lib.rs
or main.rs
.
High-level function to load full crate source code from the filesystem. Use it instead of read_crate
if you want to process cfg
attributes and read only code relevant to specific feature or platform configuration.
The same as read_full_crate_source_code
, but with additional argument:
Type Definitions
Generic error type to report from callbacks